package com.yiba.vpn.protocal.dns;

import java.nio.ByteBuffer;

/**
 * 封装了DNS报文的Resource part(包含了资源记录数、授权资源记录数、额外资源记录数)
 */
public class Resource {
    public String Domain;
    public short Type;
    public short Class;
    public int TTL;
    public short DataLength;
    public byte[] Data;

    private int offset;

    public int Offset() {
        return offset;
    }

    private int length;

    public int Length() {
        return length;
    }

    public static Resource FromBytes(ByteBuffer buffer) {

        Resource r = new Resource();
        r.offset = buffer.arrayOffset() + buffer.position();
        r.Domain = DnsPacket.ReadDomain(buffer, buffer.arrayOffset());
        r.Type = buffer.getShort();
        r.Class = buffer.getShort();
        r.TTL = buffer.getInt();
        r.DataLength = buffer.getShort();
        r.Data = new byte[r.DataLength & 0xFFFF];
        buffer.get(r.Data);
        r.length = buffer.arrayOffset() + buffer.position() - r.offset;
        return r;
    }

    public void ToBytes(ByteBuffer buffer) {
        if (this.Data == null) {
            this.Data = new byte[0];
        }
        this.DataLength = (short) this.Data.length;

        this.offset = buffer.position();
        DnsPacket.WriteDomain(this.Domain, buffer);
        buffer.putShort(this.Type);
        buffer.putShort(this.Class);
        buffer.putInt(this.TTL);

        buffer.putShort(this.DataLength);
        buffer.put(this.Data);
        this.length = buffer.position() - this.offset;
    }


}
